/*
 * 公用数据验证JS库,该类是common.js的附加类,需要先加载common.js
 * @author 蔡源
 * @since 2006-9-28
 */
 
/**
 * 删除所选信息(对选定的多个复选框,弹出系统确认信息框)
 * @param element 复选框对象
 */
function sl_confirmRemove(element)
{
	if (element == null)
	{
		sl_alert("未选定任何记录！");
		return false;
	}
	if(checkedCount(element) == 0)
	{
		sl_alert("请选定要删除的记录！");
		return false;
	}
	return sl_confirm('删除选定的记录');
} 
 

/**
 * 系统确认保存信息框
 * @param newFlag 是否新增标志
 */
function sl_confirmUpdate(newFlag)
{
	if (newFlag == null)
		return sl_confirm("保存");
	else
		return sl_confirm("保存修改");
}

/**
 * 恢复所选信息(对选定的多个复选框,弹出系统确认信息框)
 * @param element 复选框对象
 */
function sl_confirmResume(element)
{
	if (element == null)
	{
		sl_alert("未选定任何记录！");
		return false;
	}
	if(checkedCount(element) == 0)
	{
		sl_alert("请选定要恢复的记录！");
		return false;
	}
	return sl_confirm('恢复选定的记录');
} 

/**
 * 判断字符串中是否包含中文
 */
function haveChinese(str)
{		
	for (i = 0; i < str.length; i++)
		if (str.charCodeAt(i) > 127)
			return true;
	return false;
}

/**
 * 判断字符串是否为纯英文字母
 */
function isLetter(str)
{
	for (i = 0; i < str.length; i++)
	{
		if((str.charCodeAt(i)>=65&&str.charCodeAt(i)<=90)||(str.charCodeAt(i)>=97&&str.charCodeAt(i)<=122))
		return true;
	}
	return false;
}

/**
 * 检查输入表单不能为空
 * @param field 输入表单对象
 * @param name 输入表单的名称
 */
function sl_checkNull(field, name)
{	
	var str = trim(field.value);	
	if(str == "")
	{
		sl_alert("'"+name + "'不能为空，请您填写'" + name + "'！");
		field.focus();
		field.select();
		return false;
	}
	return true;
}

/**
 * 检查输入表单的长度必须在限定范围内
 * @param field 输入表单对象
 * @param name 输入表单的名称
 * @param maxlength 输入最大长度
 * @param minlength 输入最小长度
 */
function sl_check(field, name, maxlength, minlength)
{	
	var str = trim(field.value);
	
	if(minlength != 0 && str == "")
	{
		sl_alert("'"+name + "'不能为空或以空格开头，请您填写'" + name + "'！");
		field.focus();
		field.select();
		return false;
	}

	if(minlength != 0 && field.value.ansiLength() < minlength)
	{
		if(minlength == maxlength)
			sl_alert("'"+name + "'的长度必须是" + minlength + "位，请您重新填写！");
		else
			sl_alert("'"+name + "'的长度至少需要" + minlength + "位以上，请您重新填写！");
		field.focus();
		return false;
	}
	if(maxlength != 0 && field.value.ansiLength() > maxlength)
	{
		sl_alert("'"+name + "'的长度不能超过" + maxlength + "个字符，请您重新填写！");
		field.focus();
		return false;
	}
	return true;
}



/**
 * 表单对象的值必须是数字
 * @param field 表单对象
 * @param name 表单对象名称
 * @param flag 是否可以为空标志
 */
function sl_checkInt(field, name,flag)
{
	var i;
	var str = trim(field.value);
	if(flag)
	{
		if (str == null||str.length <= 0)
		{
			sl_alert("'"+name+"'不能为空！");
			field.focus();
			field.select();
			return false;
		}	
	}	
	for (i = 0; i < str.length; i++)
	{
		if (str.charCodeAt(i) < 48 || str.charCodeAt(i) > 57)
		{
			sl_alert("'"+name+"'只能是数字！");
			field.focus();
			field.select();
			return false;
		}
	}
	return true;
}

/**
 * 检查输入表单的值必须是整型且长度必须在限定范围内,如果minlength>0则不能为空
 * @param field 输入表单对象
 * @param name 输入表单的名称
 * @param maxlength 输入最大长度
 * @param minlength 输入最小长度
 */
function sl_checkIntLen(field, name, maxlength, minlength)
{	
	var str = trim(field.value);
	if(minlength > 0 && str == "")
	{
		sl_alert("'"+name + "'不能为空，请您重新填写！");
		field.focus();
		field.select();
		return false;
	}	
	if(minlength > 0)
	{
		if(!/^-?\d+$/g.test(field.value))
		{
				sl_alert("'"+name+"'必须是整数，请您重新填写！");
				field.focus();
				field.select();
				return false;
		}
		var len = str.length;
		if(str.indexOf("-")>=0)
			len = len -1;
		if(len<minlength||len>maxlength)
		{		
				sl_alert("'"+name+"'的长度必须在"+minlength+"到"+maxlength+"之间，请您重新填写！");
				field.focus();
				field.select();
				return false;		
		}
	}		
	return true;
}

/**
 * 检查输入表单的值必须是整型且大小必须在限定范围内
 * @param field 输入表单对象
 * @param name 输入表单的名称
 * @param maxValue 输入最大值
 * @param minValue 输入最小值
 */
function sl_checkIntValue(field, name, maxValue,minValue)
{
    var i, str
    if (!sl_check(field, name, 0, 0))
        return false;
    str = field.value;
    for (i = 0; i < str.length; i++)
    {
        if (str.charAt(i) != ',')
        {
            if (str.charCodeAt(i) < 48 || str.charCodeAt(i) > 57)
            {
                sl_alert("'"+ name + "'必须是整数数字，请您重新填写！");
                field.focus();
                field.select();
                return false;
            }
        }
    }
    var strInt = parseInt(str);    
    if(strInt<minValue||strInt>maxValue)
    {
        sl_alert("'"+name + "'的值必须在 " + minValue + " 到 " + maxValue + " 之间，请您重新填写！");
        field.focus();
        field.select();
       return false;
    }
    return true;
}

/**
 * 检查输入表单的值只能包含字母、数字或下划线，且开头的只能是字母或下划线(通常用于用户名注册)
 * @param field 输入表单对象
 * @param name 输入表单的名称
 */
function sl_checkEn(field, name)
{
	if (!/^([a-zA-z_]{1})([\w]*)$/g.test(field.value)){
			sl_alert("'"+name+"'只可包含字母、数字或下划线，且开头的只能是字母或下划线！");
			field.focus();
			field.select();
			return false;
	}
	return true;
}

/**
 * Email的校验
 */
function sl_checkEmail(field, name)
{
	if(!sl_checkNull(field, name)) return false;		
	if (field.value.length > 0 && !/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/g.test(field.value)) {
		sl_alert("'"+name+"'格式错误，请重新输入！");		
		field.focus();
		field.select();
		return false;
	}
	return true;
}

/**
 * 20050809：由于可以包含负号，所以整数长度的检验要增加判断
 */
function sl_checkDecimal(field, name, intlen, pointlen, minlength)
{
	var pos1, pos2, ilen, plen;
	if(!sl_checkFloatLen(field, name, 1000, minlength))
		return false;
	if ((minlength == 0) && (field.value.length == 0))
		return true;
	pos1 = field.value.indexOf(".");
	pos2 = field.value.lastIndexOf(".");
	if ((pos1 >= 0) && ((pos2 > pos1) || (field.value.length < 3)))
	{
		sl_alert("数字格式无效，请您输入有效的'"+ name +"'！");
		field.focus();
		field.select();
		return false;
	}
	if ((pos1 == 0) || (pos1 == field.value.length - 1))
	{
		sl_alert("数字格式无效，请您输入有效的'"+ name +"'！");
		field.focus();
		field.select();
		return false;
	}
	if (pos1 == -1)
	{
		ilen = field.value.length;
		plen = 0;
	}
	else
	{
		ilen = pos1;
		plen = field.value.length - pos1 - 1;
	}
	if(field.value.indexOf("-")==0)
	{
		ilen--;
	}
	if(ilen > intlen)
	{
		sl_alert("数字格式无效，整数位数不能超过" + intlen + "位，请您输入有效的'"+ name +"'！");
		field.focus();
		field.select();
		return false;
	}
	if (plen > pointlen)
	{
		sl_alert("数字格式无效，小数位数不能超过" + pointlen + "位，请您输入有效的'"+ name +"'！");
		field.focus();
		field.select();
		return false;
	}
	return true;
}

/**
 * 表单对象的值必须是浮点型
 * @param field 表单对象
 * @param name 表单对象名称
 * @param flag 是否可以为空标志
 */
function sl_checkFloat(field, name,flag)
{
	var i;
	var str = trim(field.value);
	if(flag)
	{
		if (str == null||str.length <= 0)
		{
			sl_alert("'"+name+"'不能为空！");
			field.focus();
			field.select();
			return false;
		}	
	}
	for (i = 0; i < str.length; i++)
	{
		if (str.charAt(i) != "." && str.charAt(i) != "-")
		{
			if (str.charCodeAt(i) < 48 || str.charCodeAt(i) > 57)
			{
				sl_alert("'"+name+"'只能是浮点型！");
				field.focus();
				field.select();
				return false;
			}
		}
	}
	return true;
}


/**
 * 浮点型数据校验
 * @param field 表单对象
 * @param name 表单对象名称
 * @param maxlength
 * @param minlength
 */
function sl_checkFloatLen(field, name, maxlength, minlength)
{
	var i, j, str;
	if (!sl_check(field, name, maxlength, minlength))
		return false;
	str = field.value;
	j = 0;
	if (str != "" && str.charAt(0) == '-')
		j = 1;
	for (i = j; i < str.length; i++)
	{
		if (str.charAt(i) != '.')
		{
			if (str.charCodeAt(i) < 48 || str.charCodeAt(i) > 57)
			{
				sl_alert("'"+name + "'必须是数字，请您重新填写！");
				field.focus();
				field.select();
				return false;
			}
		}
	}
	return true;
}

/**
 * 字符串只能包含bag中的字符
 * @param str 字符串
 * @param bag 限定字符包
 */
function isCharsInBag(str, bag)
{
	var i;
	// Search through string's characters one by one.
	// If character is in bag, append to returnString.
	for (i = 0; i < str.length; i++)
	{
		// Check that current character isn't whitespace.
		var c = str.charAt(i);
		if (bag.indexOf(c) == -1) return false;
	}
	return true;
}

/**
 * 检验IP地址的正确性
 */
function sl_checkIp(field,name)
{
	 var check= function(v){try{return (v<=255 && v>=0)}catch(x){return false}};
	 var re=field.value.split(".");
	 var ret = (re.length==4)?(check(re[0]) && check(re[1]) && check(re[2]) && check(re[3])):false
	 if(ret)
	 	return true;
	 else
	 {	 	
	 	sl_alert("请选择" + name + "！");	
	 	field.focus();
        field.select();
	 	return false;
	 }
}

/**
 * 检验是否包含了HTML代码
 */
function sl_checkHTML(field,name)
{
	var content = field.value;	 
	if(content.isEmpty())
		return true;       
	//Stripts the <script> tags from the html
	var scriptregex = "<script[^>.]*>[sS]*?</script>";
	var scripts = new RegExp(scriptregex, "gim");
	if(scripts.test(content))
	{
		sl_alert(name + "不能包含脚本语句！");	
	 	field.focus();
        field.select();
	 	return false;
	}
	//Stripts the <style> tags from the html
	var styleregex = "<style[^>.]*>[sS]*?</style>";
	var styles = new RegExp(styleregex , "gim");
	if(styles.test(content))
	{
		sl_alert(name + "不能包含样式表语句！");	
	 	field.focus();
        field.select();
	 	return false;
	}
	//Strips the HTML tags from the html
	var objRegExp = new RegExp("<(.| )+?>", "gim");
	if(objRegExp.test(content))
	{
		sl_alert(name + "不能包含HTML标签！");	
	 	field.focus();
        field.select();
	 	return false;
	}
	return true;
}
//*****************判断日期*********************************
//20041118 Created by CaiYuan
//判断日期格式的步骤:  1.判断是否有非法字符，日期中只能包含数字和分隔符
//					  2.判断日期中是否有两个分隔符把字符串分成3份，即年、月、日
//					  3.判断日期年、月、日是否合法
//					  4.在月的基础上判断日的合法性(是否闰年)
function sl_checkDate(field,name)
{	
	var info = "日期格式不合法 ";
	
	var separator = '-';  	//分隔符必须是‘-’
	var tempy = ''; 		//年
	var tempm = ''; 		//月	
	var tempd = ''; 		//日
	var tempArray; 
//1。。。。			
	if (!isCharsInBag( field.value, "0123456789-"))
	{
		sl_alert(name + "中只能包含0123456789和分隔符'-'\n" + "请您重新输入"+ name);
		field.focus();
		field.select();
		return false;
	}
	if (!sl_check(field, name, 10, 8))
	{
		field.focus();
		field.select();
		return false; 
	}		
//2。。。。
	tempArray = field.value.split(separator); 	
	
	if (tempArray.length!=3) 	//判断是否被分隔成3份（年、月、日）
	{	
		sl_alert(info +",请重新输入!");
		field.focus();
		field.select();
		return false; 
	}
//3。。。。
	//判断年的合法性
	if (tempArray[0].length!=4) 
	{
		sl_alert(info + ",请输入有效的年份!");
		field.focus();
		field.select();
		return false;
	}
	else
	{
		tempy = tempArray[0];
	}
	//判断月的合法性	
	if (tempArray[1].length!=2) 
	{
		sl_alert(info + ",请输入有效的月份!");
		field.focus();
		field.select();
		return false;
	}
	else
	{
		tempm = tempArray[1];
		if(tempm<1||tempm>12) 
		{ 
   			sl_alert("月份必须在01和12之间!"); 
    		field.focus();
			field.select();
    		return false; 
    	}		
	}
	//判断日的合法性	
	if (tempArray[2].length!=2) 
	{
		sl_alert(info + ",请输入有效的日期!");
		field.focus();
		field.select();
		return false;		
	}
	else
	{
		tempd = tempArray[2];
		if(tempd<1||tempd>31)
		{ 
   			 sl_alert("日期必须在01和31之间!");
   			 field.focus();
			 field.select(); 
   		 	 return false; 
 		}
 		else
 		{   
 			if(tempm == 2)
 			{  
     			if(isLeapYear(tempy)&&tempd>29)
     			{ 
       				sl_alert("该年为闰年，二月份日期必须在01到29之间!"); 
      				field.focus();
					field.select(); 
       				return false; 
     			}       
 				if(!isLeapYear(tempy)&&tempd>28)
 				{ 
      			     sl_alert("该年不是闰年，二月份日期必须在01到28之间!");
       			     field.focus();
					 field.select(); 
      				 return false; 
     			} 					    			
 			}
			if((tempm == 4||tempm == 6||tempm == 9||tempm == 11)&&tempd>30) 
			{
				sl_alert("该月没有31号" + ",请输入有效的日期!"); 
      			field.focus();
				field.select(); 
       			return false; 
			}	
 		}
	}		
	return true;
}

//闰年判断
function isLeapYear(year) 
{ 
 	if((year%4==0&&year%100!=0)||(year%400==0)) 
 	{ 
 		return true; 
 	} 	 
 		return false; 
} 

//*****************判断日期---无分隔符*********************************
//20041230 Created by CaiYuan
//判断日期格式的步骤:  1.判断是否有非法字符，日期中只能包含数字，且只能是8位
//					  2.substring把日期分割成年、月、日
//					  3.判断日期年、月、日是否合法
//					  4.在月的基础上判断日的合法性(是否闰年)
function sl_checkNumDate(field,name)
{	
	var info = "日期格式不合法 ";
	
	var tempy = ''; 		//年
	var tempm = ''; 		//月	
	var tempd = ''; 		//日	
//1。。。。			
	if (!isCharsInBag( field.value, "0123456789"))
	{
		sl_alert(name + "中只能包含0123456789\n" + "请您重新输入"+ name);
		field.focus();
		field.select();
		return false;
	}
	if (!sl_check(field, name, 8, 8))
	{
		field.focus();
		field.select();
		return false; 
	}		
//2。。。。
	tempy = field.value.substring(0,3); 	
	tempm = field.value.substring(4,5); 
	tempd = field.value.substring(6,7); 
//3。。。。
	//判断年的合法性
	if (tempy<1800||tempy>3000) 
	{
		sl_alert(info + ",请输入有效的年份!");
		field.focus();
		field.select();
		return false;
	}	
	//判断月的合法性	
	if(tempm<1||tempm>12) 
	{ 
   		sl_alert("月份必须在01和12之间!"); 
    	field.focus();
		field.select();
    		return false; 
    	}
	//判断日的合法性	
	if(tempd<1||tempd>31)
	{ 
		 sl_alert("日期必须在01和31之间!");
 		 field.focus();
		 field.select(); 
 	 	 return false; 
 	}
 	else
 	{   
 		if(tempm == 2)
 		{  
  			if(isLeapYear(tempy)&&tempd>29)
    			{ 
       				sl_alert("该年为闰年，二月份日期必须在01到29之间!"); 
      				field.focus();
					field.select(); 
       				return false; 
     			}       
 				if(!isLeapYear(tempy)&&tempd>28)
 				{ 
      			     sl_alert("该年不是闰年，二月份日期必须在01到28之间!");
       			     field.focus();
					 field.select(); 
      				 return false; 
     			} 					    			
 		}
		if((tempm == 4||tempm == 6||tempm == 9||tempm == 11)&&tempd>30) 
		{
				sl_alert("该月没有31号" + ",请输入有效的日期!"); 
      			field.focus();
				field.select(); 
       			return false; 
		}	
 	}
	return true;
} 


